package com.cz;

import java.util.ArrayList;
import java.util.Scanner;

public class Studentmanager {
    public static void main(String[] args) {
        // 创建集合，用来存放学生对象。
        ArrayList<Student> stus = new ArrayList<>();
        // 定义while循环，使程序在退出前不停止。
        // 给循环起名，方便终止循环。
        breakover:
        while (true) {
            // 显示选项界面，创建输入框。
            Scanner sc = new Scanner(System.in);
            System.out.println("--------------欢迎来到学生管理系统--------------");
            System.out.println("1 添加学生");
            System.out.println("2 删除学生");
            System.out.println("3 查看学生");
            System.out.println("4 退出");
            System.out.println("请输入你的选择：");
            // 捕捉输入的数字
            int num = sc.nextInt();
            // 使用switch判断输入的数字是几时为哪种情况。
            switch (num) {
                case 1:
                    // 添加学生
                    addStudent(stus);
                    break;
                case 2:
                    // 删除学生
                    delStudent(stus);
                    break;
                case 3:
                    // 查看学生
                    showStu(stus);
                    break;
                case 4:
                    // 退出
                    System.out.println("谢谢使用");
                    // 终止while循环
                    break breakover;
            }
        }
    }

    // 查看当前集合内的学生。
    public static void showStu(ArrayList<Student> stus) {
        // 判断集合stus长度是否为0，为0则集合中没有学生。
        if (stus.size() == 0) {
            System.out.println("无信息，请先添加学生");
        }
        System.out.println("学号\t\t姓名\t\t年龄\t\t居住地");
        // 遍历集合stus，根据下标i，依次打印集合内存在的学生。
        for (int i = 0; i < stus.size(); i++) {
            Student stu = stus.get(i);
            System.out.println(stu.getSid() + "\t\t" + stu.getName() + "\t\t" + stu.getAge() + "\t\t" + stu.getAddress());
        }
    }

    // 添加学生
    public static void addStudent(ArrayList<Student> stus) {
        // 创建输入框，捕捉输入的学号，姓名，年龄，居住地。
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生学号：");
        String sID = sc.next();
        System.out.println("请输入学生姓名：");
        String sName = sc.next();
        System.out.println("请输入学生年龄：");
        int sAge = sc.nextInt();
        System.out.println("请输入学生居住地：");
        String sAddr = sc.next();

        // 创建添加的学生对象stu，向集合stus中传入输入框捕捉到的学生信息。
        Student stu = new Student(sID, sName, sAge, sAddr);
        stus.add(stu);
        System.out.println("添加学生成功！");
    }

    // 删除学生
    public static void delStudent(ArrayList<Student> stus) {
        // 创建输入框，捕捉要删除的学生的学号
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生学号：");
        String Sid = sc.next();

        // 定义一个index，获取getIndex中的返回值index
        int index = getIndex(stus, Sid);
        // 进行判断，如果index=-1，那么getIndex中的if判断错误，输入的要删除的学生学号不在集合中已有的学生中。
        // 反之getIndex中的if判断正确，返回的index就是查询到的下标i，使用remove直接在集合中进行删除
        if ( index==-1) {
            System.out.println("不存在此学生，请重新输入。");
        }   else {
            stus.remove(index);
            System.out.println("删除成功");
        }
    }

    // 创建方法getIndex，判断要删除的学生是否在集合中
    public static int getIndex(ArrayList<Student> stus, String cur_id) {
        // 定义一个index为-1
        int index = -1;
        // 遍历集合stus
        for (int i = 0; i < stus.size(); i++) {
            // 根据下标获取集合中每个学生
            Student stu = stus.get(i);
            // 定义sid获取集合中每个学生的学号getSid
            String sid = stu.getSid();
            // 进行判断，将删除选项中输入框捕捉的学生学号cur_id和遍历到的学生学号sid进行比较
            // 如果相等，则index就等于当前遍历到的下标i，反之返回index=-1。
            if (cur_id.equals(sid)) {
                index = i;
            }
        }
        return index;
    }


}
